Chapter 4: Systems and Software Developers Guide

As of this writing, most of the practical experience with the National Transportation Communications for ITS Protocol (NTCIP) has been based on draft versions of the standard and other documents that were designed to provide a stepping stone to full NTCIP implementation. Specifically, the documents to which software has been developed include the following:

Software for the NTCIP is being developed by a number of organizations. The full NTCIP family is described by a number of documents, including the following

The remainder of this chapter provides details relating to the various software sources that are currently available in the public domain.

Central System Software Implementations
There are four basic prototype implementations of central systemstyled software. None of these packages were designed to operate a real system; rather, they are designed to provide tools to the industry to test equipment submitted as being compliant to a specific protocol.

Caltrans
Caltrans has developed a Protocol Exerciser to test device support of the AB3418 protocol. This exerciser can be configured to act as a "central system" (i.e., it fulfills the role as the manager of the communications channel). The software allows a user to send down a single message at a time and will provide an analysis of the response received from the attached device. It supports all of the AB3418 messages, and as such is designed for signal controllers.

Washington State Department of Transportation
The Washington State Department of Transportation (WSDOT) has also developed a central system emulator; however, the department's software is designed to test VMS's support of the VMS E1 protocol. It is similar to the Caltrans Exerciser in that it allows users to send messages to a sign and it provides an analysis of the received response.

FHWA
The FHWA funded the development of the TRB demonstration system, which includes a prototype central system that provides control of up to 10 traffic signals and four VMSs. The traffic signals must support AB3418, and the VMSs must support VMS E1 and/or VMS E1.2. The central system includes the background point-to-multipoint polling as included in the Class B Profile. Finally, it also includes support of center-to-center communications conforming to the TMC E1.2.

NTCIP Exerciser
The FHWA is currently funding the development of the NTCIP Exerciser software. This software package will be able to read in any properly formatted management information base (MIB) from a floppy disk and support the exchange of fully compliant NTCIP messages under the direction of the operator. The package will eventually support the creation of macros to enable the user to perform a number of operations sequentially and to record the results. Initial versions will only support Class B communications, but future versions will support Class A as well.

Signal Controller
There have also been efforts in the industry to develop device simulators, which provide a sample device for new central system software to be tested against.

Caltrans
The previously mentioned Protocol Exerciser that Caltrans developed can also be configured to simulate a signal controller at a specific drop address. This emulator supports all of the messages defined in the AB3418 protocol and responds appropriately; it also provides full error checking as required by the AB3418.

FHWA
As a part of the effort to prepare the TRB Demonstration, the Caltrans software was modified such that it could be configured to respond to any drop address (i.e., it can be configured to simulate 63 controllers simultaneously). This was useful in verifying the operations of the central system controlling multiple devices in a fast polling cycle.

The software was also enhanced in order to support the background point-to-multipoint polling.

Variable Message Signs
Software packages to support VMSs have also been produced by the various development efforts.

WSDOT
In addition to the prototype VMS control system, WSDOT developed a VMS simulator program. Their program supports the VMS E1 protocol and provides the appropriate responses. The software can optionally be used to control one of the physical signs used in the TRB demonstration. This is accomplished by the software translating the messages to the proprietary protocol defined by the VMS.

FHWA
As a part of the TRB Demonstration, the FHWA funded the development of a DOS-based VMS controller that supports both the VMS E1 and VMS E1.2 protocols (i.e., both Class A and Class B). Optionally, the software can be used to control a physical VMS through translating messages to a proprietary protocol. Two versions of this software were developed in order to control signs from two different manufactures for the demonstration.

Other Devices
In addition to the above software packages, other efforts are under way to produce simulators for other devices.

I-95 Corridor
Work is underway to develop a HAR simulator and a VMS simulator. These will be developed as conformance tools for the field deployments that are under way along the I-95 Corridor.

Recommended References
There is a wide variety of publications available that relate to the NTCIP. This section lists some of the resource materials that have been used in the development process, as well as the location of developed materials

World Wide Web
A wide range of documentation is available on the World Wide Web NTCIP Home Page located at: http://www.ntcip.org/

The site currently includes such items as these:

NTCIP Joint Standards Committee
In addition, there are articles in the December 1995, January 1996, and April 1996 issues of the ITE Journal. Future issues of the ITE Journal will include additional NTCIP articles, as well as a bimonthly NTCIP update section, which will provide the most recent information regarding the NTCIP development.

The NTCIP Joint Standards Committee is also attending a variety of major industry conferences and giving presentations describing various aspects of the NTCIP. Finally, the NTCIP demonstration is being given at various conferences.

Caltrans
Caltrans also has a home page that can be reached from a link on the above referenced page. This site includes the following:

NEMA Technical Committee
The most recent versions of the NEMA Standards can be obtained from:

National Electrical Manufacturers Association
1300 N. 17th St.
Rosslyn, Virginia 22209
703-841-3200
703-841-3300 fax

Organizations Planning Deployment of NTCIP
In addition to the above sources of information, other agencies are planning NTCIP deployments, and it is the hope of the Joint Standards Committee that the various deploying agencies will work together to share information. Here is a partial list of agencies considering the use of the NTCIP:

Books and Other Sources
During the development of the standards and prototypes, a number of books were consulted; including the following:

RFC Documents
Another important source of information is the Internet. Electronic copies of RFC documents may be obtained using "anonymous FTP" to the host nic.ddn.mil or ds.internic.net. Printed copies are available from

DDN Network Information Center
14200 Park Meadow Drive
Suite 200
Chantilly, VA 22021
(800) 365-3642
703-802-4535

Common Development Pitfalls
During the development of the NTCIP demonstration, a number of issues arose in trying to get the various components to interoperate. These issues are documented here to provide future implementers and integraters information for their design consideration.

Protocol-Related Issues
A number of the problems discovered during the integration work related to invalid interpretation of the specifications, especially relating to those clauses that reference other specifications without providing significant detail. In order to minimize the number of these conflicts in the future, a discussion of some of these issues is provided below.

Bit and Byte Order
Bit and byte order in a computer are not necessarily the same as the bit and byte order on the transmission medium. The transmission order varies in accordance with the guidelines of international standards. Implementations should ensure that the representation of the most and least significant bits and bytes in the computer accurately reflect what is sent and received on the transmission medium.

Extended Addresses
There has been some confusion about how large a high-level data link control (HDLC) address must be supported. NTCIP devices are required to support one-and two-byte HDLC addresses. All addresses are odd; if the first byte of an address is even, then the address is multibyte.

Maximum Duration Between Successive Bytes
Many existing field devices expect incoming messages to be a series of bytes with minimal delay between the bytes. They will time out as an end of message when a byte is not received in 15 ms for 1,200-bps communications. This means that consecutive messages must be separated by about 30 ms at 1,200 bps. With the simultaneous use of soft carrier turnoff this gap must be increased by the soft carrier turnoff time. At higher transmission rates these times are proportionally reduced.

Because of the desire for full-duplex communications, Class B NTCIP devices should be designed to support much greater durations between successive bytes as suggested in the Class B Profile. In short, the only distinguishing limit of a message is the 0x7E flag.

Response Time
The public domain code that is available was developed using DOS and Windows; in both cases the serial port interrupt is only checked every 50 ms. Thus, these systems do not perform quite as well as desired; however, this was not an issue for the demonstration.

A real product should use a serial port driver to achieve the desired performance. The desired performance is system dependent and is stored in the T2 object. Typically, this value should be in the range of 20 ms. If the data link layer of the secondary (remote device) has not received a response from the upper layers just prior to the T2 timer expiring, it should send an empty frame (assuming the poll bit was set). The secondary may not respond after the T2 timer expires.

Control Byte
The NTCIP includes support for three control byte values. A primary can transmit an unnumbered poll (0x33), an unnumbered information command with the poll bit set (0x13), or an unnumbered information command without the poll bit set (0x03). The secondary always responds with unnumbered information response with the final bit set (0x13). (Note that these values are presented according to Internet encoding rules.)

Frame Handling
The primary may constantly poll each device in order to determine whether it has any information to report. If the primary station has information to transmit with this poll (e.g., a request), it encapsulates this data in an unnumbered information command with the poll bit set. If there is not any information to send, it sends an "empty" frame of six bytes called an unnumbered poll frame. If the primary station has information to send, but does not want to give the opportunity for the receiving device to respond (e.g., a broadcast), it sends the data in an unnumbered information frame without the poll bit set.

When a secondary station receives an unnumbered information frame with the poll bit set or an unnumbered poll, it responds with an unnumbered information frame with the final bit set. If the secondary has any data to send with this frame, it is encapsulated within the frame. If the secondary does not have any data to send, it should send an empty frame.

When a secondary station receives an information command without the poll bit set (e.g. a broadcast message), it does not respond.

It should be further noted that these rules only deal with the data link layer. For example, a central system may send a broadcast message without a poll at the data link layer, while requesting a response at the application layer. The remote device would prepare a response at the application layer that would then be stored in the device's data link layer. This response could only be sent out after the device has received a frame with the poll bit set.

For example, if dynamic object 1 had been defined to be the time object, central could send the following byte stream:

Flag Addr Ctrl IPI STMP ----SET Time---- CRC Flag

7E FF 03 C1 91 31 E6 E7 00 XX XX 7E

The address indicates that it is received by everyone and the control byte prevents anyone from responding on the wire; however, the STMP byte is a SET with response. Thus, all of the devices generate responses at the application layer and they are sent to the data link layer to be transmitted. Then, the data link layer waits until permission is granted for the device to speak (e.g., an unnumbered poll frame). In this way, a central system can broadcast the time and then go back and ensure that all the devices received the message.

If the secondary has a pending response waiting at the data link layer, it should send the response immediately upon receiving a frame with the poll bit set. If the incoming frame contains information, the information should be processed. This might entail producing a new response that will be sent to the data link layer, where it will reside until the next poll is received.

A device is responsible for storing one response frame at the data link layer. If a second response is generated before the first is sent, the first response should be overwritten.

CRC Algorithm
Examples of how to code the cyclical redundancy check (CRC) algorithm can be found in the AB3418 code and the FHWA code used the demonstration.

Invalid Frame
When a device receives an invalid frame it should just discard the frame. Invalid frames include those with invalid CRCs, invalid initial protocol identifiers, etc. Devices should not provide any response to invalid frames.

STMP Message Type Byte
To see how the STMP Message Type Byte is coded and used, see NEMA Standards Publication TS 3.2, National Transportation Communications for ITS Protocol, Simple Transportation Management Framework, page 5-1.

Length Values for Variable Message Fields
The exact meaning of this field (i.e., which bytes are included in the count) has led to some confusion. The count value does not include the count byte in the count (i.e., the count starts the byte after the count byte).

Carriers
It is very important that secondary stations on multidrop lines turn off their modem carriers when not sending data. After responding to a poll, the carrier must be removed from the line so that other stations may respond.

Systems Integration

In addition to those issues raised about the interpretation of the specifications, there were also issues over how systems should be designed and what should be required in procurement specifications to achieve the goal of systems interoperability. This section provides some guidance on how to approach these issues.

Number of Devices on a Channel
The maximum number of reliable field devices on a single modem channel is limited by the input impedance of the transmission output circuit in the field device modems. Each of these outputs is a load on the field device transmission line. A practical upper limit is somewhere around 15 field devices for the current technology 202 modems. Advanced 202 modems can be used that will isolate the individual transmission circuits unless the modem is actively transmitting. In a system with only four to seven field devices per channel this consideration can be neglected.

MIB Issues
All NTCIP procurements should specify that the manufacturers/developers must provide the devices' MIB module(s) to the purchasing agency, with rights to distribute to their agents (e.g., those persons acting on behalf of the agency). The MIBs should be provided in ASCII format on the medium of the procuring agency's choice. The MIBs should include all Simple Network Management Protocol (SNMP)/Simple Transportation Management Protocol (STMP) objects that the device(s) support.

NTCIP Byte Stream Examples
One of the challenges of the NTCIP is to be flexible enough to not only lend itself to other, yet undefined, application requirements of ITS, but also to meet the demands on the communication requirements of the existing traffic control devices. One such demand is the fact that many existing traffic control systems have very limited bandwidth. To resolve this problem, the architects of the NTCIPhave developed and standardized NEMA TS 3.2 - Simple Transportation Management Framework (STMF) and NEMA TS 3.3 Class B Profile. These documents provide a very efficient standardized methodology by which to exchange data.

Unfortunately, there is a potential with any new standard that different people may interpret the standard differently. This section is aimed at providing one interpretation of how to use these specifications in order to exchange data. The section does not form a specification in any sense, but can be used as a guide to determine where there may be inconsistencies in interpretations of the specification documents and may increase the potential of having consistent interpretations throughout the transportation community. If differences are discovered through this process, they should be raised with the NTCIP Joint Standards Committee. Over time, this section will be updated to reflect the resolution of any such differences and thus can become an even more definitive example.

Agencies implementing equipment claiming to be NTCIP compliant are encouraged to interact with agencies and individuals involved in the NTCIP development to maximize the benefits gained through sample field deployments.

Introduction
STMF specifies multiple formats that may be used in exchanging NTCIP data, including these:

Books describing SNMP are readily available from technical bookstores; therefore, this section is limited to describing the various STMP encodings. The approach taken to demonstrate the various encodings is to present a sample process to configure the dynamic object definition table (which can not be done using dynamic objects) and then retrieving and setting the values referenced by the dynamic objects.

The examples used in this section are based on object definitions as defined in NEMA TS 3.4 - Global Object Definitions and the dynamic object definition table objects as defined in the STMF.

Definition of a Dynamic Object
Before presenting the example, it is useful to provide a background on what dynamic objects are. A dynamic object is conceptualized as an aggregate of related managed objects that can be operated on as a group. The goal is to minimize the bandwidth requirements when communicating frequently requested sets of objects between a management station and remote devices. Dynamic objects are designed to be defined at run time to provide the management station with flexibility in how it communicates with an agent.

For this purpose a node has been assigned under the protocols node called the dynamic object management (dynObjMgmt) with OBJECT IDENTIFIER ::= {protocols 3}. The dynObjMgmt subtree contains two nodes, dynObjDef and dynObjData.. Details of the node assignments from the transportation node can be found in Section 4.2 of the STMF.

Formal Specification for Dynamic Objects
Dynamic objects are formally specified in Sections 4 and 5 of the STMF. Section 4.2 identifies the position of dynamic objects in the International Organization for Standardization tree.

Section 4.2 defines the rules for the creation and management of dynamic objects. These rules will be applied in the subsequent sections of this section.

Configuration of Dynamic Objects
We will briefly examine the configuration of dynamic objects as specified in section 4.2 of the standard.

Dynamic Object Definition (dynObjDef)
The standard defines a table under the dynObjDef node, which is used to describe which objects are contained within each dynamic object and in which order the individual object appear within each dynamic object.

Each row (entry) in the table identifies a specific object, in which dynamic object it resides, and its position (order) within the dynamic object. The dynamic object definition table with sample data is shown below:

dnObjNumber
dynObjIndex
dynObjVariable
dynObjOwner
dynObjStatus
1
1
1.3.6.1.4.1.1206.
4.2.6.3.4.3

(eventLogID)
NTCIP Guide Example
1

(Valid)

The table is explained in the standard and a summary follows:

The dynObjNumber identifies with which of the 13 dynamic objects this row of the table is associated.

The dynObjIndex identifies the order in which the associated variable will be located in the specified dynamic object.

The dynObjVariable is the object identifier and instance information of the subject data.

The dynObjOwner is used to indicate the owner of this dynamic object. The management station may optionally set the dynObjOwner to any value it desires.

The dynObjStatus indicates whether the row is valid, invalid, or under creation ; the values are explained in detail in section 4.1.4 of the standard.

Examples
The following clauses provide sample encodings of the various message types that may be sent according to the STMP.

Configuring a Dynamic Object
As an example, we will define dynamic object 1 as consisting of three objects defined in NEMA TS 3.4 - Global Object Definitions. These objects were taken from one of the three virtual tables needed to define the event log mechanism. These objects are described in detail below after presenting the location of these objects under the global tree:

eventLogTable ::= 1.3.6.1.4.1.1206.4.2.6.3.4

Three of the objects under the iso (1) org (3) dod (6) internet (1) private (4) enterprises (1) nema (1206) transportation (4) devices (2) global (6) globalReport (3) eventLogTable (4) eventLogEntry(1) node are defined as follows:

eventLogClass     OBJECT-TYPE
SYNTAX INTEGER     (0..65535)
ACCESS     read-write
STATUS     mandatory
DESCRIPTION
"This object contains the event configuration ID (from the eventLogConfig Table) that caused this table entry. It indicates the row in the eventLogConfig table responsible for this event entry. If this object is set to zero (0) then the associated row (in the eventLog Table) is cleared and the following rows shall be renumbered to maintain a sequential eventNumber sequence."
::= {eventLogEntry 3}
eventLogTime     OBJECT-TYPE
SYNTAX INTEGER     (0..4228250625)
ACCESS     read-only
STATUS     mandatory
DESCRIPTION
"The time that the event occurred in seconds since the epoch of 00:00:00 (midnight) January 1, 1970 per the device's globalTime object. If the device does not have valid date and time information, then this shall be the time in seconds since the device is powered up."

::= {eventLogEntry 4}

eventLogValue     OBJECT-TYPE
SYNTAX     OPAQUE
ACCESS     read-only
STATUS     mandatory
DESCRIPTION
"The value of this object is dt to the value pointed to bt the eventConfigConpareOID of the associated eventLogID whn the event was logged. Its length is variable."

::= {eventLogEntry 5}

Thus the OID for the three objects are:

Assuming that we are working with an STMP-compliant device that supports these three objects, we can aggregate the three objects into a dynamic object following the procedure outlined in STMF.

The virtual representation of the dynObjDef object table that is about to be created is shown below:

dynObjNumber
dynObjIndex
dynObjVariable
dynObjOwner
dynObjStatus
1
1
eventLogID
NTCIP Guide Example
1
1
2
eventLogTime
NTCIP Guide Example
1
1
3
eventLogValue
NTCIP Guide Example
1

For the purposes of this example we will set the value of the dynObjOwner to NTCIP Guide Example for each row.

The setup of the dynamic object table involves a row by row configuration of the table.

This is achieved by sending set request command(s) to the agent, appropriately setting the values in the table. During the process of setting these values, the dynObjStatus entry for each row is set to the value "createRequest (2)".

According to Section 5.2.1.4 of the Standard, the Information Field shall contain the VarBindList. This is defined as

SEQUENCE OF
SEQUENCE{
name ObjectName,
value ObjectSyntax
}

The concept of VarBindList is further explained below.

A variable represents an instance of a managed object. A variable binding, or VarBind, refers to the pairing of the name of the variable (including the instance, or index, of the variable) and its value. A list of, called a SEQUENCE OF, such VarBinds or pairs is defined as a VarBindList. This concept is reflected in the following encoding which represents the initial set up of a dynamic object table.

The byte stream has been modified according to the rules in 5.1.2 of the Standard. Rule (d) states that the OBJECT IDENTIFIER fields shall be interpreted as in 5.1.1.3. This means that if the Object ID Field of the PDU Header Field is 0 (nema node), then the stream is modified and encoded as indicated below. If the object ID Field of the PDU Header Field was 14 (0xE) then the objects would have to be specified from the ISO node (the struck-out bytes would be added, and the length values would be adjusted accordingly).

STMP Set Request from NEMA


90 								STMP SET REQUEST from NEMA
30 81 D2							Sequence (0x30) with length defined in 1 byte (0x81) 																					and the length value is 210 bytes (0xD2)
	30 14							Sequence of 20 bytes (0x14) (name-value pair)
		06 08						OID of length = 8 bytes (0x08) follow
		04 01 03 01 01 03				OID of dynObjVariable (1.3.6.1.4.1.1206.4.1.3.1.1.3)
								from the nema node
		01 01						Index (dynObjNumber, dynObjIndex)
		06 08						OID of length = 8 bytes  (0x08) follow
		04 02 06 03 04 03				OID of eventLogID (1.3.6.1.4.1.1206 4.2.6.3.4.3)
								from the NEMA node
 		03 01						index for eventLogClass=3 and eventLogNumber=1
	30 1F							Sequence of 31 bytes (0x1F) (name-value pair)
		06 08						OID of length = 8 bytes (0x08) 
		04 01 03 01 01 04				OID of dynObjOwner (1.3.6.1.4.1.1206.4.1.3.1.1.4) 
		01 01						from nema node and index 
		04 13 						The value which is an Octet string of 19 bytes follow
		4E 54 43 49 50 20 47 75 69 64 65 20 45 78	Value of dynObjOwner = NTCIP Guide Example
		61 6D 70 6C 65
	30 0D							Sequence of 13 bytes (0x0D) (name-value pair)
		06 08						OID of length = 8 bytes (0x08) follow
		04 01 03 01 01 05				OID of dynObjStatus (1.3.6.1.4.1.1206.4.1.3.1.1.5)
		01 01 						and index
		02 01 02					Value of dynObjStatus (Integer= 02, Length =1, Value =2 [Create Request])
	30 14							Sequence of 20 bytes (0x14) (name-value pair)
		06 08						OID of length = 8 bytes (0x08) follow
		04 01 03 01 01 03 01 02				OID of dynObjVariable from NEMA and index
		06 08						OID of length = 6 bytes follow
		04 02 06 03.04.04 03 01				OID of eventLogTime from NEMA and index
	30 1F							Sequence of 31 bytes (0x1F) (name-value pair)
		06 08						OID of length = 6 bytes (0x06) follow
		04 01 03 01 01 04 01 02				OID of dynObjOwner from NEMA and index
		04 13 						The value which is an Octet string of 19 bytes follow
		4E 54 43 49 50 20 47 75 69 64 65 20 45 78	Value of dynObjOwner = NTCIP Guide Example
		61 6D 70 6C 65
	30 0D							Sequence of 13 bytes (0x0D) (name-value pair)
		06 08						OID of length = 8 bytes (0x08) follow
		04 01 03 01 01 05 01 02				OID of dynObjStatus from NEMA and index
		02 01 02					Value of dynObjStatus (Integer= 02, Length =1, Value =2 [Create Request])
	30 12							Sequence of 18 bytes (0x12) (name-value pair)
		06 06						OID of length = 8 bytes (0x08) follow
		04 01 03 01 01 03 01 03				OID of dynObjVariable from nema and index
		06 06						OID of length = 8 bytes follow
		04 02 06 03 04 05 03 01				OID of eventLogValue from NEMA and index
	30 1F							Sequence of 31 bytes (0x1F) (name-value pair)
		06 08						OID of length = 8 bytes (0x08) follow
		04 01 03 01 01 04 01 03				OID of dynObjOwner from nema and index
		04 13 						The value which is an Octet string of 19 bytes follow
		4E 54 43 49 50 20 47 75 69 64 65 20 45 78	Value of dynObjOwner = NTCIP Guide Example
		61 6D 70 6C 65
	30 0D							Sequence of 13 bytes (0x0D) (name-value pair)
		06 08						OID of length = 8 bytes (0x08) follow
		04 01 03 01 01 05 01 03				OID of dynObjStatus from nema and index
		02 01 02					Value of dynObjStatus (Integer= 02, Length =1, Value =2 [Create Request])

The complete Class B Profile encoding of this message is as shown below (encoded as an unnumbered information frame with the poll bit set):

7E YY 13 C1 90 30 81 D2 30 14 06 08 04 01 03 01 01 03 01 01 06
08 04 02 06 03 04 03 03 01 30 1F 06 08 04 01 03 01 01 04 01 01
04 13 4E 54 43 49 50 20 47 75 69 64 65 20 45 78 61 6D 70 6C 65
30 0D 06 08 04 01 03 01 01 05 01 01 02 01 02 30 14 06 08 04 01
03 01 01 03 01 02 06 08 04 02 06 03 04 04 03 01 30 1F 06 08 04
01 03 01 01 04 01 02 04 13 4E 54 43 49 50 20 47 75 69 64 65 20
45 78 61 6D 70 6C 65 30 0D 06 08 04 01 03 01 01 05 01 02 02 01
02 30 14 06 08 04 01 03 01 01 03 01 03 06 08 04 02 06 03 04 05
03 01 30 1F 06 08 04 01 03 01 01 04 01 03 04 13 4E 54 43 49 50
20 47 75 69 64 65 20 45 78 61 6D 70 6C 65 30 0D 06 08 04 01 03
01 01 05 01 03 02 01 02 XX XX 7E

XX XX = CRC for stream

YY = Address to which the message is to be sent

STMP Set Response from NEMA
Assuming that the receiving device sucessfully received the data packet, it should respond with an STMP Set Response with encoding from the same reference node (in this example from NEMA). The encoding will be as follows:

D0 	                                                         STMP SET RESPONSE from NEMA

The complete Class B Profile encoding of the data packet is as shown below:

7E YY 13 C1 D0 XX XX 7E

XX XX = CRC for frame

YY = device address

STMP Set Request from Root
The final step is to activate the table as a dynamic object, and this is done by setting the dynObjStatus for each row to valid (1). This operation could be (and likely would be) done with encoding from the NEMA node, but this example encodes it from the root node for explanatory purposes. The encoding will then be as follows:


9E							STMP SET Request from Root
30 42							Sequence of 66 bytes (0x42) bytes
	30 14 						Sequence of 20 bytes (0x14) (Pair: OID 
							and its value follow
		06 0F					OID of length = 15 bytes (0x0F) follow
		2B 06 01 04 01 89 36 04 01 03 01 01 05	OID of dynObjStatus from root node
		01 01 					Index 
		02 01 01				Value of dynObjStatus (Integer= 02, 
							Length=1, Value = 1 [Valid])
	30 14 						Sequence of 20 bytes
		06 0F 					OID of length = 15 bytes follow
		2B 06 01 04 01 89 36 04 01 03 01 01 05	OID of dynObjStatus from root
		01 02					Index 
		02 01 01				Value of dynObjStatus 
	30 14						Sequence of 20 bytes 
		06 0F 					OID of length = 15 bytes
		2B 06 01 04 01 89 36 04 01 03 01 01 05	OID of dynObjStatus from root node
		01 03					Index 
		02 01 01				Value of dynObjStatus 


STMP Set Response from Root
Again, the receiving device would indicate that it sucessfully received the data packet.

The encoding will be as follows:

DE STMP					SET RESPONSE from Root

Once the dynamic object table structure is created with the above sequence of operations, the management station can efficiently GET and SET the values referenced by the associated dynamic object whenever the need arises.

STMP Dynamic Object Get Request
A GET request for the data referenced by the dynamic object can be performed in just 1 byte of application layer encoding as follows:

Get dynamic object. #1
81

The resulting Class B Profile byte stream (including header and footer information) will look as follows:

7E YY 13 C1 81 XX XX 7E

Explanation of the Event Log
In the example detailed above, dynamic object 1 consists of data from the event log table. Thus, in order to understand what will be returned from a get request for this dynamic object, one must first understand the event log.

The contents of the event log are defined in the event log configuration table as depicted below. The user configures this table to define which events should be logged in the event log table.

ID
Class
Mode
Compare Value
Compare Value 2
Compare OID
Log OID
Config Action
INTEGER
INTEGER
Enum
INTEGER
INTEGER
OID
OID
Enum

Each defined event has a unique ID to distinguish the event. Whenever this event occurs, it is recorded in the event log table under the class identified in the configuration table. Events are defined based on certain conditions becoming true. The mode variable identifies the type of event (e.g., on-change, when equal to, exceeds, etc) and the compare values indicate the values to use in the comparison defined in the mode (e.g., when exceeds compare value). The compare OID field references the variable to use in the comparison (e.g., when temperature exceeds compare value). The Log OID references the variable that should be logged when the event becomes true (e.g., when temperature exceeds compare value log the status of the fans). Finally, the configuration action variable identifies whether this event should be logged or whether it is disabled (other options may be added in the future, such as returning a trap when the condition occurs).

For the purpose of this example, it is assumed that there is a entry in the event configuration table as follows:

ID
Class
Mode
Compare Value
Compare Value 2
Compare OID
Log OID
Config Action
17
3
on-change
0
0
phaseStatus GroupGreens.1
phaseStatus GroupGreens.1
log

The phaseStatusGroupGreens (from TS 3.5) object indicates which of the phases are currently active within a particular phase group. The first phase group (identified by the ".1" index extension) indicates the status of the first eight phases. Thus, whenever the green status of any of the first eight phases change, the new value of the phaseStatusGroupGreen.1 object is recorded in the Class 3 section of the log. The log entry is denoted as event ID 17. Note that for the on-change mode, the values of compare value and compare value2 are irrelevant.

The amount of space allocated to the Class 3 events is determined by the event class table. Assuming that this number is non-zero, the object referenced in our dynamic object (i.e., Class 3 Number 1) is valid.

The event log table is defined as follows with a sample entry:

Class
Number
ID
Time
Value
3
1
17
00:00:00 6/1/96
34

The class indicates the class of the event as identified in the event configuration table. The number indicates which entry in the table (within a given Class). The ID identifies the event ID as specified in the event configuration table. The time is a time stamp of when the event occured, in this case at midnight, the morning of June 1, 1996. The value records the value of the object referenced by the associated log OID field in the event configuration table, in this case it records the value of phaseGroupGreenStatus.1 as of midnight on June 1, 1996. The value 34 represents phases 2 and 6 as being green.

With this background of the event log, and the above assumptions regarding the "current" values, we can now present the response to the above get request.

STMP Dynamic Object Get Response
For the dynamic object 1 get request above, the corresponding get response byte stream will be as follows:

C1			GET RESPONSE for Dynamic Object number 1
11			Event Configuration ID number 17 (= 0x11 hex)
31 AF 88 00		833587200 seconds since 00:00:00 1/1/70
01			Variable is one byte in length (This field is 	required 
			because OPAQUEs are variable length) 
22			phases 2 and 6 were green when event was 
			recorded

The resulting Class B byte stream will look as follows:

7E YY 13 C1 C1 11 31 AF 88 00 01 22 XX XX 7E

STMP Dynamic Object Get-Next Request
According to subsection 5.1.1.2 (message type field), a get-next request shall be sent from a manager to an agent to request the value of the next object in lexigraphic order. This can be applicable in a case where more than one dynamic object structure has been defined in a device. For example if dynamic objects 1, 4 and 5 are defined in a device, a get-next request for dynamic object 1, as indicated below, would retrieve the data referenced by dynamic object 4 with similar encoding as before.

Get-next dynamic object next to number 1
B1

STMP Dynamic Object Set Request-No Reply
If the user wanted to send a message to set the objects referenced by dynamic object 1, but did not want to receive a confirmation of the response, it would send the following byte stream (using the same values as before).


A1				Set Request-No Reply for dynamic object Number 1
11				Event Configuration ID number 17 (= 0x11 hex)
31 AF 88 00			833587200 seconds 
01				A one byte value follows
22				Phases 2 and 6 are green

The remote device would process such a request if possible, but would not respond (at the application layer) under any condition. This operation may be desired if the management station is concerned about overwriting traps or other pending responses.

STMP Dynamic Object Error Response
You may have noticed that the above example contained an error. Both the event log time and event log value parameters are "read only" and thus may not be set. In the above example, this error would not be reported because the request indicated no reply. However, if the message had been a set request instead of a set request-no reply (e.g., a PDU Header field of 0x91 instead of 0xA1), the following error would be returned:


E1				Error Response for Dynamic Object 1
04				the first error encountered was a read OnlyError
02				this error was encountered on the second item in the packet

Note: According to subsection 5.2.1.5 (Error responses) the agent will return an error status and index number only. There is no need for the agent to return the information contained in the set request since the manager retains the last request transmitted to an agent in order to determine what part of the request caused the error.

Because this error response provides valuable information, the use of set request-no reply should be used with great caution.

Other Nondynamic Examples
The following examples provide a contrast between the bandwidth consumption of the dynamic objects given above and non-dynamic objects as shown below.

STMP Get Request from NEMA
a get request for the objects defined in the above dynamic object 1 would be represented as follows:


80							GET REQUEST  from the NEMA node 
	30 24						Sequence of 36 bytes (VarBindList) follows
		30 0A					Sequence of 10 bytes follows
			06 08				OID of length = 8 bytes follows
			04 02 06 03 04 03		OID of eventLogID from NEMA node
			03 01				Index
							Note: No value according to rule 5.1.2 (a)
		30 0A					Sequence of 10 bytes follows
			06 08				OID of length = 8 bytes follows
			04 02 06 03 04 04 03 01 	OID & index of eventLogTime from NEMA node
		30 0A 					Sequence of 10 bytes follows
			06 08 				OID of length = 8 bytes follows
			04 02 06 03 04 05 03 01		OID of eventLogValue from NEMA node

Notice the difference in overhead between the get request for a dynamic object and the same request for the objects treated as nondynamic objects. In this example, the complete Class B frame for the dynamic object would be 8 bytes and the frame for non-dynamic objects would be 45 bytes (a savings of over 82 percent!). This differential would be even greater for more complex dynamic objects. For a process that is frequently repeated, the dynamic object option provides a significant advantage in reducing bandwidth requirements.

STMP Get Response from NEMA
The corresponding get response would be encoded as follows:


C0							GET RESPONSE from NEMA node used as root) 
	30 30						Sequence of 48 bytes (VarBindList) follows
		30 0D					Sequence of 13 bytes follows
			06 08				OID of length = 8 bytes follows
			04 02 06 03 04 03 03 01		OID and Index of eventLogID from NEMA node
			02 01 11			Value return (INTEGER=2, length=1, value=17)
		30 10					Sequence of 16 bytes follows
			06 08				OID of length = 8 bytes follows
			04 02 06 03 04 04 03 01		OID and Index of eventLogTime from NEMA node
			02 04 31 AF 88 00		Value return (INTEGER=2, length=4, value= 833587200 seconds)
		30 0D					Sequence of 13 bytes follows
			06 08 				OID of length = 8 bytes follows
			04 02 06 03 04 05 03 01		OID of eventLogValue from NEMA node
			44 01 22			Value return (OPAQUE=0x44, length=1, value=0x22) 

In this case, the Class B frame response using nondynamic objects would be 58 bytes long versus 15 bytes for the dynamic object (a savings of almost 75 percent!) Once again, this savings becomes even more pronounced for more complex dynamic objects.

STMP Get-Next Request from NEMA
A get-next request can be used to retrieve instances of sequential nondynamic objects. The object retrieved is the next object in lexicographic order. For tabular objects, this would be the next sequential entry of the same parameter. Examples of this are provided below.


B0 							GET Next Request from NEMA
	30 0A						Sequence of 10 bytes
		06 08   				Object Identifier of 8 bytes
		04 02 06 03 04 05 03 01			OID and index of eventLogValue.3.1

Assuming that there was a second entry of the same ID recorded at 00:00:20 on June 1, 1996, and that the recorded green phases were four and eight, the response would be


C0							GET Response from NEMA 
	30 0D						Sequence of 13 Bytes
		06 08					OID of 8 bytes
		04 02 06 03 04 05 03 02			eventLogValue for Class 3 Number 2
		02 01 88				INTEGER=2, Length=1, Value=0x88

The Get-Next Request can also be used to get a sequence of items as follows:


B0 							Get Next Request from NEMA
	30 24						Sequence of 36 bytes
		30 0A					Sequence of 10 bytes
			06 08 				OID of 8 bytes
			04 02 06 03 04 03 03 01		OID and Index of eventLogID.3.1
		30 0A					Sequence of 10 bytes
			06 08 04 02 06 03 04 04 03 01	TLV of OID & index of eventLogTime.3.1
		30 0A					Sequence of 10 bytes
			06 08 04 02 06 03 04 05 03 01	TLV of OID & index of eventLogValue.3.1

And the response would be:


C0 							Get Response from NEMA
	30 30						Sequence of 48 bytes
		30 0D					Sequence of 13 bytes
			06 08				OID of 8 bytes
			04 02 06 03 04 03 03 02 	OID & index of eventLogID.3.2
			02 01 11			INTEGER of 1 byte = 17
		30 10					Sequence of 16 bytes 
			06 08 04 02 06 03 04 04 03 02	TLV of OID & index of eventLogTime.3.2
			02 04 31 AF 88 14		INTEGER of 4 bytes = 00:00:20 6/1/96
		30 0D					Sequence of 13 bytes
			06 08 04 02 06 03 04 05 03 02	TLV of OID & index of eventLofValue.3.2
			02 01 88			INTEGER of 1 byte = 0x88

Conclusion
There is considerable reduction in overhead once a group of objects have been defined as a dynamic object.

Dynamic object implementation will be most useful for retrieving objects that need frequent polling (e.g., traffic data in signal controllers). This means that once the dynamic object table has been created, the dynamic values of the objects can be frequently polled with minimal overhead


Previous Section | Table of Contents | Next Section